home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
fdimg
/
oh!.2hd
/
OH!DEN_B.LZH
/
TOOLS
/
KEYWITCH
/
KW_S200.LZH
/
w19etc.s
< prev
next >
Wrap
Text File
|
1995-03-20
|
5KB
|
237 lines
.include w01dos.mac
.include w03const.mac
.include w04macro.mac
.include w05reloc.mac
.text
.even
********************************
*文字列を小文字化する
*<a0.l:小文字化する文字列
*<a1.l:結果を入れるワーク
*?d0/a0-a1
to_lower_neg::
cmp.b #$A0,d0
blo to_lower_twin
cmp.b #$E0,d0
blo to_lower_loop
to_lower_twin::
move.b d0,(a1)+
move.b (a0)+,d0
to_lower_loop::
move.b d0,(a1)+
to_lower::
move.b (a0)+,d0
beq to_lower_end
bmi to_lower_neg
cmp.b #'A',d0
blo to_lower_loop
cmp.b #'Z',d0
bhi to_lower_loop
or.b #$20,d0
bra to_lower_loop
to_lower_end::
move.b d0,(a1)+
rts
********************************
*プログラムのテーブルを移動する
*<a0.l:テーブルの先頭アドレス
*<a5.l:コピー先の先頭アドレス
*>a5.l:コピー先のエンドコードの直後のアドレス
*?d0/a0/a5
move_prog_table::
move.w (a0)+,d0
beq move_prog_table_end
move_prog_table_loop::
move.w d0,(a5)+
moveq.l #(24-2)/2-1,d0
move_prog_table_copy::
move.w (a0)+,(a5)+
dbra d0,move_prog_table_copy
move.w (a0)+,d0
bne move_prog_table_loop
move_prog_table_end::
move.w d0,(a5)+
rts
********************************
*条件付きのテーブルを移動する
*<a0.l:テーブルの先頭アドレス
*<a5.l:コピー先の先頭アドレス
*>a5.l:コピー先のエンドコードの直後のアドレス
*?d0/a0/a5
move_table::
bsr get_table_size
move_table_loop::
move.w (a0)+,(a5)+
dbra d0,move_table_loop
rts
********************************
*テーブルの並びのサイズを求める
*<a0.l:テーブルの並びの先頭アドレス
*>d0.l:テーブルの並びのワード数(末尾の-1.wの分を含まない)
*>z:テーブルがある=0/ない=1
get_table_size::
move.l a0,-(sp)
move.w (a0),d0 *データサイズ
bmi get_table_size_end
get_table_size_loop::
lea.l 2+44(a0,d0.w),a0 *次のテーブルの先頭アドレス
move.w (a0),d0 *データサイズ
bpl get_table_size_loop
get_table_size_end::
move.l a0,d0
movea.l (sp)+,a0
sub.l a0,d0
lsr.l #1,d0
rts
********************************
*keep_tail以降にテーブルを詰める
* スーパーバイザーモードで呼び出すこと。
*<a6.l:base
*>a5.l:常駐部分の末尾のアドレス
*?d0-d4/a0-a1/a5
trans_all::
lea.l (keep_tail)r,a5 *転送先の先頭アドレス
di
lea.l (prog_table_work)r,a0 *プログラムのテーブル
move.l a5,(prog_table)r *詰めた場合のアドレス
bsr move_prog_table *転送する
ei
lea.l (table_list)r,a1
move.l (a1)+,d0
trans_all_loop::
movea.l d0,a0
di
move.w (a1)+,d0
move.l a5,(a6,d0.w) *詰めた場合のアドレス
bsr move_table *転送する
ei
move.l (a1)+,d0
bne trans_all_loop
move.l a4,-(sp)
movea.l a6,a4
bsr trans_tables2
movea.l (sp)+,a4
*キーボード回りを初期化する
move.b LEDSNS.w,d1 *LEDの状態
bra _key_init *スーパーバイザーモードで呼び出す
table_list::
.dc.l prefix_table_work
.dc.w prefix_table-base
.dc.l assign_table_work
.dc.w assign_table-base
.dc.l suffix_table_work
.dc.w suffix_table-base
.dc.l char_table_work
.dc.w char_table-base
.dc.l meta_table_work
.dc.w meta_table-base
.dc.l break_table_work
.dc.w break_table-base
.dc.l copy_table_work
.dc.w copy_table-base
.dc.l den_table_work
.dc.w den_table-base
.dc.l int_table_work
.dc.w int_table-base
.dc.l lock_table_work
.dc.w lock_table-base
.dc.l reset_table_work
.dc.w reset_table-base
.dc.l sbreak_table_work
.dc.w sbreak_table-base
.dc.l unlock_table_work
.dc.w unlock_table-base
.dc.l 0
********************************
*その他のテーブルの移動
*<a4.l:転送先のbase
*<a6.l:転送元のbase
*?d0/a0
trans_tables2::
move.l a5,-(sp)
di
*
move.l (ask_flag_bits_work)r,ask_flag_bits-base(a4)
*
lea.l live_repeat_bits-base(a4),a5
lea.l (live_repeat_bits_work)r,a0
.rept 16/4
move.l (a0)+,(a5)+
.endm
*
lea.l kill_repeat_bits-base(a4),a5
lea.l (kill_repeat_bits_work)r,a0
.rept 16/4
move.l (a0)+,(a5)+
.endm
*
lea.l led_map-base(a4),a5
lea.l (led_map_work)r,a0
moveq.l #7-1,d0
@@: move.b (a0)+,(a5)+
dbra d0,@b
*
lea.l joy1_map-base(a4),a5
lea.l (joy1_map_work)r,a0
moveq.l #8-1,d0
@@: move.b (a0)+,(a5)+
dbra d0,@b
*
lea.l joy2_map-base(a4),a5
lea.l (joy2_map_work)r,a0
moveq.l #8-1,d0
@@: move.b (a0)+,(a5)+
dbra d0,@b
*
ei
movea.l (sp)+,a5
rts
********************************
*テーブル領域を転送してデバイス初期化終了
*<a5.l:リクエストヘッダのアドレス
*>d0.l:終了コード(=0)
device_keeper::
movem.l d1-d4/a0-a1/a4-a6,-(sp)
lea.l base(pc),a6
movea.l a5,a4 *リクエストヘッダのアドレス
bsr trans_all *テーブル領域を転送する
*デバイス初期化終了
*<a4.l:リクエストヘッダのアドレス
*<a5.l:デバイスの末尾のアドレス
move.l a5,14(a4) *デバイスの末尾のアドレスを設定
move.l a5,(device_end)r *デバイスの末尾のアドレスを設定
movem.l (sp)+,d1-d4/a0-a1/a4-a6
moveq.l #0,d0
rts
********************************
*テーブル領域を転送して常駐終了
*<a6.l:base
*?d0-d4/a0-a1/a5
keeper::
super
bsr trans_all *テーブル領域を転送する
user
*常駐終了
*<a5.l:常駐部分の末尾のアドレス
*<a6.l:base
lea.l (prog_head)r,a0
suba.l a0,a5 *常駐部分のサイズ
clr.w -(sp)
move.l a5,-(sp)
DOS _KEEPPR
********************************
*常駐部分の終わり
keep_tail::